package elev.sim;

import com.kitfox.svg.SVGElement;
import com.kitfox.svg.SVGElementException;
import com.kitfox.svg.animation.AnimationElement;
import com.kitfox.svg.app.beans.SVGPanel;
import java.net.URI;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Klasa wewnętrzna z dostępnymi kolorami.
 *
 * @author Mikołaj Kowalski
 */
class Colors {

    final static String RED = "#ff0000";
    final static String GREEN = "#00ff00";
    final static String YELLOW = "#ffff00";
}

/**
 * Klasa zarządzająca lampkami w GUI.
 *
 * @author Mikołaj Kowalski
 */
public class LampSwitcher {

    final static String e = "path2985";
    LampSwitcher ls;

    LampSwitcher() {
        //TODO add singleton
        // ls = new LampSwitcher();
    }

    /**
     * Zmiana koloru pojedyńczej lampy
     *
     * @param s Kolor poprzedzony znakiem '#'. Dostepne
     * @param p Panel z piłeczką do zmiany
     */
    public void change(String s, SVGPanel p) {

        URI svgURI = p.getSvgURI();
        SVGElement element = p.getSvgUniverse().getDiagram(svgURI).getElement(e);
        try {
            element.setAttribute("fill", AnimationElement.AT_CSS, s);
        } catch (SVGElementException ex) {
            Logger.getLogger(LampSwitcher.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Zmiana koloru wszytkich piłek na czerwony.
     *
     * @param allPanels Lista wszystkich paneli tworzona podczas inicjalizacji
     * GUI.
     */
    public void reset(List<SVGPanel> allPanels) {
        for (SVGPanel x : allPanels) {
            change(Colors.RED, x);
            x.repaint();
        }
    }

    /**
     * Zmiana koloru jednego rzędu.
     *
     * @param allPanels Wszystkie panele.
     * @param winda Rząd windy. 0 - pierwszy, 1 - drugi
     * @param kolor Kolor zmiany
     * @throws Exception Zły parametr winda.
     */
    public void switchElevator(List<SVGPanel> allPanels, int winda, String kolor) throws Exception {
        if (winda == 0) {
            for (int i = 0; i < 8; i++) {
                change(kolor, allPanels.get(i));
                allPanels.get(i).repaint();
            }
        } else if (winda == 1) {
            for (int i = 8; i < 16; i++) {
                change(kolor, allPanels.get(i));
                allPanels.get(i).repaint();
            }
        } else {
            throw new Exception();
        }

    }
}
